package com.gioneco.service.impl;

import com.gioneco.model.PageResultVO;
import com.gioneco.model.SystemLogDO;
import com.gioneco.model.SystemLogVO;
import com.gioneco.service.SystemService;
import com.gioneco.util.StateTransition;
import com.gioneco.util.esCondition.Criteria;
import com.gioneco.util.EsLambdaQueryUtil;
import com.gioneco.util.esCondition.Query;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * 系统操作日志 Service impl
 * @author dongjialin
 */
@Service
public class SystemServiceImpl implements SystemService {

    @Autowired
    private EsLambdaQueryUtil esLambdaQueryUtil;

    /**
     * 获取系统操作日志
     * @param systemLogVO  查询条件
     */
    @Override
    @StateTransition
    public PageResultVO listSystemLog(SystemLogVO systemLogVO) {
        PageResultVO<SystemLogDO> pageResultVO = esLambdaQueryUtil.selectQueryByPage(Query.<SystemLogDO>query
                (Criteria.where(SystemLogVO::getAccount)
                        .is(systemLogVO.getAccount())
                        .and(SystemLogVO::getOperateType)
                        .is(systemLogVO.getOperateType())
                        .and(SystemLogVO::getOperateDate)
                        .gte(systemLogVO.getStartDate())
                        .lte(systemLogVO.getEndDate())
                        .order(SystemLogDO::getOperateDate, SortOrder.DESC,true)
                        .page(systemLogVO.getCurrent(), systemLogVO.getSize())), SystemLogDO.class);
        return pageResultVO;
    }

    /**
     * 获取系统操作日志
     * @param systemLogVO  查询条件
     */
    @StateTransition
    public List<SystemLogVO> getSystemLogList(SystemLogVO systemLogVO) {
        List<SystemLogVO> systemLogVOS = esLambdaQueryUtil.selectList(Query.<SystemLogVO>query
                (Criteria.where(SystemLogVO::getOperateDate)
                        .gte(systemLogVO.getStartDate())
                        .lte(systemLogVO.getEndDate())
                        .order(SystemLogDO::getOperateDate, SortOrder.DESC,true)
                        .page(systemLogVO.getCurrent(), systemLogVO.getSize())), SystemLogVO.class);
        return systemLogVOS;
    }

}
